package cn.le.rmi;

import java.rmi.AlreadyBoundException;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.UnicastRemoteObject;

/**
 * 远程对象必须实现UnicastRemoteObject类，这样才能保证客户机访问得远程对象时，
 * 该远程对象将会把自身的一个拷贝以socket的形式传输给客户机，此时客户机所获得的
 * 这个拷贝称为“存根”，而服务器本身以存在的远程对象则称之为“骨架”。其实此时的存根
 * 是客户机的一个代理，用于与服务器的通信，而骨架也可认为服务器的一个代理，用于接受
 * 客户机的请求之后调用远程方法来响应客户机的请求。
 *
 * UnicastRemoteObject 用户导出的远程对象和获得该远程对象通信的存根
 *
 */
public class PerfectTime extends UnicastRemoteObject implements PerfectTimeI {

    protected PerfectTime() throws RemoteException {
    }

    @Override
    public long getPerfectTime() throws RemoteException {
        return System.currentTimeMillis();
    }

    public static void main(String[] args) {
        try {
            PerfectTime pt = new PerfectTime();
            Registry registry = LocateRegistry.createRegistry(8888);
            registry.bind("perfectTime", pt);

            System.out.println("Ready to do time");
        } catch (RemoteException e) {
            e.printStackTrace();
        } catch (AlreadyBoundException e) {
            e.printStackTrace();
        }

    }

}
